package com.design.working.dao;

import com.design.working.dto.counselor.CounselorHandleStudentApplicationDTO;
import com.design.working.dto.counselor.SearchCounselorStudentAttendanceDTO;
import com.design.working.po.StudentApplicationDetailPO;
import com.design.working.po.StudentApplicationExaminationPO;
import com.design.working.po.StudentMsgPO;
import com.design.working.po.counselor.CounselorSelectStudentApplicationPO;
import com.design.working.po.counselor.CounselorStudentAttendanceRecordPO;
import com.design.working.vo.counselor.CounselorCollegeStudentInfoVO;
import com.design.working.vo.counselor.CounselorHandleStudentWorkApplicationVO;
import com.design.working.vo.student.JobSelectionVO;

import java.util.List;

/**
 * 辅导员端
 *
 */
public interface CounselorDAO {

    /**
     * 查找本院未审批的学生岗位申请记录
     *
     * @param uid  辅导员工号
     * @param page  分页当前页码
     * @param limit 分页每页展示数据
     * @return 查询到的本院未审批的学生岗位申请记录
     */
    List<CounselorHandleStudentWorkApplicationVO> selectStudentWorkApplication(Integer uid, Integer page, Integer limit);

    /**
     * 审批学生的岗位申请
     *
     * @param counselorId 辅导员id
     * @param counselorHandleStudentApplicationDTO 辅导员对学生申请记录的审批内容
     */
    void insertStudentApplicationHanding(Integer counselorId, CounselorHandleStudentApplicationDTO counselorHandleStudentApplicationDTO);

    /**
     * 通过工号查找辅导员在数据库中id
     *
     * @param uid 辅导员工号
     * @return 辅导员在数据库中id
     */
    int selectCounselorId(Integer uid);

    /**
     * 查找申请表中学生申请工作填写的个人信息
     *
     * @param smtId 学生申请工作表中对应的个人信息记录id
     * @return 学生申请工作填写的个人信息
     */
    StudentApplicationDetailPO selectStudentApplicationDetail(Integer smtId);

    /**
     * （申请岗位）查找全部岗位
     *
     * @param place 需要查询的岗位所属的行政分类（job_category）
     * @param page  分页当前页码
     * @param limit 分页每页展示数据
     * @return 查询到的岗位
     */
    List<JobSelectionVO> selectJob(String place, Integer page, Integer limit);

    /**
     * 查找本院学生信息
     *
     * @param uid   辅导员工号
     * @param page  分页当前页码
     * @param limit 分页每页展示数据
     * @return 查询到的本院学生信息
     */
    List<CounselorCollegeStudentInfoVO> selectStudentInfo(Integer uid, Integer page, Integer limit);

    /**
     * 通过学号姓名查找本院学生信息
     *
     * @param uid         辅导员工号
     * @param page        分页当前页码
     * @param limit       分页每页展示数据
     * @param stuUid      学生学号
     * @param studentName 学生姓名
     * @return 查询到的本院学生信息
     */
    List<CounselorCollegeStudentInfoVO> selectStudentInfoByName(Integer uid, Integer page, Integer limit, String stuUid, String studentName);

    /**
     * 查询学生详细信息
     *
     * @param uid 学生学号
     * @return 学生个人详细信息
     */
    StudentMsgPO selectStudentMsg(Integer uid);

    /**
     * 查询本院学生考勤记录
     *
     * @param uid         辅导员工号
     * @param page        分页页数
     * @param limit       每页数据条数
     * @return 学生考勤记录
     */
    List<CounselorStudentAttendanceRecordPO> selectCollegeStudentAttendance(Integer uid, Integer page, Integer limit);

    /**
     * 通过学号姓名查询本院学生考勤记录
     *
     * @param uid       辅导员工号
     * @param page      分页页数
     * @param limit     每页数据条数
     * @param searchDTO 搜索的信息
     * @return 查询到的通过学号姓名查询本院学生考勤记录
     */
    List<CounselorStudentAttendanceRecordPO> selectCollegeStudentAttendanceByName(Integer uid, Integer page, Integer limit, SearchCounselorStudentAttendanceDTO searchDTO);

    /**
     * 通过学号姓名和时间范围查询本院学生考勤记录
     *
     * @param uid       辅导员工号
     * @param page      分页页数
     * @param limit     每页数据条数
     * @param searchDTO 搜索的信息
     * @return 查询到的通过学号姓名和时间范围查询本院学生考勤记录
     */
    List<CounselorStudentAttendanceRecordPO> selectCollegeStudentAttendanceByTime(Integer uid, Integer page, Integer limit, SearchCounselorStudentAttendanceDTO searchDTO);

    /**
     * 查询本院学生申请岗位的信息
     * @param uid         辅导员工号
     * @param page        分页页数
     * @param limit       每页数据条数
     * @return 学生申请岗位的信息
     */
    List<CounselorSelectStudentApplicationPO> selectStudentApplication(Integer uid, Integer page, Integer limit);

    /**
     * 通过学号姓名查询本院学生申请岗位的信息
     * @param uid         辅导员工号
     * @param page        分页页数
     * @param limit       每页数据条数
     * @param stuUid      学生学号
     * @param studentName 学生姓名
     * @return 学生申请岗位的信息
     */
    List<CounselorSelectStudentApplicationPO> selectStudentApplicationByName(Integer uid, Integer page, Integer limit, String stuUid, String studentName);

    /**
     * 查询学生岗位申请的审批详情
     * @param swaId 学生岗位申请表id
     * @return 查询到的学生岗位申请审批详情
     */
    StudentApplicationExaminationPO selectStuAppExamination(Integer swaId);

    //不需要专门写查询三者都未审批的学生岗位申请审批详情

    /**
     * 查询部门员工和管理员都未审批的学生岗位申请审批详情
     * @param swaId 学生岗位申请表id
     * @return 查询到的部门员工和管理员都未审批的学生岗位申请审批详情
     */
    StudentApplicationExaminationPO selectStuAppExamination0(Integer swaId);

    /**
     * 查询管理员未审批的学生岗位申请审批详情
     * @param swaId 学生岗位申请表id
     * @return 查询到的管理员未审批的学生岗位申请审批详情
     */
    StudentApplicationExaminationPO selectStuAppExamination1(Integer swaId);

    /**
     * 查询当前学生岗位申请是否已被辅导员和部门员工以及管理员审批
     *
     * @param swaId 学生岗位申请表id
     * @return 0-三者都未审批; 1-辅导员已审批；2-部门员工已审批；3-三者都已审批
     */
    int isHandleStuApp(Integer swaId);
}
